﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Content;
using System.Xml;
using Microsoft.Xna.Framework.Input;

namespace _2D
{
    public class Menu
    {

        // Variable para definir el área en la que cargaremos el fondo a mostrar para el menú principal.
        private Rectangle AreaFondoMenu;
        // Variable de tipo textura para cargar el fondo a mostrar para el menú principal.
        private Texture2D FondoMenu;
        private string xmlOptionsFile;
        private XmlDocument menuOptionsXml;
        private XmlNodeList menuOption;
        private SpriteFont font;
        private int selectedOption;


        // Instancias de objetos para el manejo de fuentes.
        SpriteFont fuente;

        public Menu(int x, int y, int width, int height)
        {
            // Área en la que cargaremos el fondo a mostrar para el menú principal.
            AreaFondoMenu = new Rectangle(x, y, width, height);
        }

        public Menu(int x, int y, int width, int height, string xmlFile)
        {
            // Área en la que cargaremos el fondo a mostrar para el menú principal.
            AreaFondoMenu = new Rectangle(x, y, width, height);
            xmlOptionsFile = xmlFile;
        }

        public void Load()
        {
            menuOptionsXml = new XmlDocument();
            menuOptionsXml.Load(xmlOptionsFile);

            menuOption = menuOptionsXml.GetElementsByTagName("option");
        }

        public void Load(ContentManager content, string nombrefondo)
        {
            // Cargamos el texto y los sprites que utilizaremos en el menú principal. "Sprites/FondoPricipal" "Texto/Jokerman"
            FondoMenu = content.Load<Texture2D>(nombrefondo);

            menuOptionsXml = new XmlDocument();
            menuOptionsXml.Load(xmlOptionsFile);

            menuOption = menuOptionsXml.GetElementsByTagName("option");

            font = content.Load<SpriteFont>("Fonts/Font1");
        }

        public void Load(ContentManager content, string nombrefondo, string nombrefuente)
        {
            // Cargamos el texto y los sprites que utilizaremos en el menú principal. "Sprites/FondoPricipal" "Texto/Jokerman"
            FondoMenu = content.Load<Texture2D>(nombrefondo);
            fuente = content.Load<SpriteFont>(nombrefuente);

            menuOptionsXml = new XmlDocument();
            menuOptionsXml.Load(xmlOptionsFile);

            menuOption =  menuOptionsXml.GetElementsByTagName("text");

            font = content.Load<SpriteFont>("Fonts/Font1");
        }

        public int Update(KeyboardState ks)
        {
            selectedOption = 0;

            if (ks.IsKeyDown(Keys.NumPad1))
            {
                selectedOption = 1;
            }
            if (ks.IsKeyDown(Keys.NumPad2))
            {
                selectedOption = 2;
            }
            if (ks.IsKeyDown(Keys.NumPad3))
            {
                selectedOption = 3;
            }

            
            return selectedOption;
        }

        public void Draw(SpriteBatch batch)
        {
            // Programar un foreach que recorra las opciones del xml.

            //Vector2 textvector1 = new Vector2(100, 150);
            //Vector2 textvector2 = new Vector2(100, 250);
            //Vector2 textvector3 = new Vector2(100, 350);

            //batch.Draw(FondoMenu, AreaFondoMenu, Color.White);
            //batch.DrawString(fuente, "Pulsa I para iniciar el juego", textvector1, Color.White);
            //batch.DrawString(fuente, "Pulsa R para ver el Ranking", textvector2, Color.White);
            //batch.DrawString(fuente, "Pulsa C para ver los creditos", textvector3, Color.White);

            batch.Draw(FondoMenu, AreaFondoMenu, Color.White);

            foreach (XmlElement nodo in menuOption)
            {
                string position = nodo.GetElementsByTagName("position")[0].InnerText;
                Vector2 textvector = new Vector2(int.Parse(position.Split(';')[0]), int.Parse(position.Split(';')[1]));
                batch.DrawString(font, nodo.GetElementsByTagName("text")[0].InnerText, textvector, Color.White);
            }
        }

    }
}
